#ifndef __LYNX_AUDIO_READER_HPP_INCLUDED__
#define __LYNX_AUDIO_READER_HPP_INCLUDED__

#include <MythStream.hpp>
#include "LynxSound.hpp"

namespace Lynx
{
namespace Audio
{

class AudioReader : public virtual Myth::ReferenceCounter
{
public:
    virtual AudioFormat get_audio_format(void) const = 0;

    virtual bool set_position(uint32_t pos) = 0;

    virtual bool is_random_access(void) const = 0;

    virtual uint32_t read_samples(void *buffer, uint32_t count) = 0;

    virtual uint32_t get_sample_count(void) const = 0;
};

class AudioReaderLoader : public virtual Myth::ReferenceCounter
{
public:
    virtual bool is_loadable_extension(const std::string &file_name) const = 0;

    virtual AudioReader *create_audio_reader(Myth::Stream::Input *input) = 0;
};

} // namespace Audio
} // namespace Lynx

#endif // __LYNX_AUDIO_READER_HPP_INCLUDED__


